package cliente.conta;

import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.ObjectInputStream.GetField;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import mensagens.EnviaDados;
import mensagens.ManterConta;
import mensagens.ManterItemConta;

public class VisualizarConta extends AbstractAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = -965954512007053935L;

	private Action executaVisualizarConta;
	
	private JFrame tfVisualizarConta;
	/*
	private JLabel lNumAp;
	private JTextField tNumAp;
	private JButton bFecha, bProcura;
	*/
	
	public VisualizarConta() {
		super("Visualizar Conta");
		this.putValue(Action.SHORT_DESCRIPTION, "Visualiza a conta de um Hóspede");
		executaVisualizarConta = new ExecutaVisualizarConta(this);
	}
	
	public void actionPerformed(ActionEvent e) {
		String s = (String) JOptionPane.showInputDialog(getTfVisualizarConta(),"Digite o número do apartamento.", "Info!",JOptionPane.PLAIN_MESSAGE);
		
		//If a string was returned, say so.
		if ((s != null) && (s.length() > 0)) {
			int i_;
		    try{
		    	i_ = new Integer(s);
		    } catch (NumberFormatException fe){
		    	JOptionPane.showMessageDialog(getTfVisualizarConta(), "Valor inválido!", "erro!", JOptionPane.ERROR_MESSAGE);
		    	getTfVisualizarConta().dispose();
		    	return;
		    }
		    // Cria um novo manter conta do tipo buscar conta
		    ManterConta mc = new ManterConta(1);
		    // Seta o número do apartamento da conta
		    mc.setNumAp(i_);
		    // Envia a mensagem e espera a resposta com a conta
		    mc = (ManterConta) EnviaDados.enviarMensagem(mc);
		    
		    // Lê a quantidade de itens da conta
		    int tamanho = mc.getC().getItens().size();
		    
		    // Cria um novo frame
		    setTfVisualizarConta(new JFrame("Visualizar Conta"));
		    // Seta a operação default ao fechar o frame (no caso, é eliminar o frame da memória)
		    getTfVisualizarConta().setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		    // Seta o container interno
			Container interno = this.getTfVisualizarConta().getContentPane();
			// Ajusta o layout do Frame para um GridBagLayout
			GridBagConstraints cons = new GridBagConstraints();
			GridBagLayout layout = new GridBagLayout();
			interno.setLayout(layout);
			// Seta uma borda de 2px entre cada elemento do frame
			cons.insets = new Insets(2,2,2,2);
		    
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			int d;
		    for(d = 0; d < tamanho; d++){
		    	JTextField t_1 = new JTextField(mc.getC().getItens().get(d).getServico().getDescricao());
		    	t_1.setEditable(false);
		    	cons.weightx	= 0.40;
		    	cons.fill		= GridBagConstraints.HORIZONTAL;
		    	cons.gridx		= 0;
		    	cons.gridy		= d;
		    	interno.add(t_1, cons);
		    	
		    	JTextField t_2 = new JTextField(sdf.format(mc.getC().getItens().get(d).getData()));
		    	t_2.setEditable(false);
		    	cons.weightx	= 0.20;
		    	//cons.fill		= GridBagConstraints.HORIZONTAL;
		    	cons.gridx		= 1;
		    	cons.gridy		= d;
		    	interno.add(t_2, cons);
		    	
		    	JTextField t_3 = new JTextField(Integer.toString(mc.getC().getItens().get(d).getQuantidade()));
		    	t_3.setEditable(false);
		    	cons.weightx	= 0.20;
		    	//cons.fill		= GridBagConstraints.HORIZONTAL;
		    	cons.gridx		= 2;
		    	cons.gridy		= d;
		    	interno.add(t_3, cons);
		    	
		    	JTextField t_4 = new JTextField(Double.toString(mc.getC().getItens().get(d).getValor()));
		    	t_4.setEditable(false);
		    	cons.weightx	= 0.20;
		    	//cons.fill		= GridBagConstraints.NONE;
		    	cons.gridx		= 3;
		    	cons.gridy		= d;
		    	interno.add(t_4, cons);
		    	
		    }
		    JButton bfecha 	= new JButton("Fechar");
		    cons.weightx	= 0.20;
		    cons.fill		= GridBagConstraints.NONE;
		    cons.gridx		= 3;
		    cons.gridy		= d+1;
		    bfecha.setActionCommand("fecha");
		    bfecha.addActionListener(getExecutaVisualizarConta());
		    interno.add(bfecha, cons);
		    
		    getTfVisualizarConta().setVisible(true);
		    getTfVisualizarConta().setSize(400,500);
		    
		    return;
		}

		//If you're here, the return value was null/empty.
		JOptionPane.showMessageDialog(getTfVisualizarConta(), "Nenhum valor informado!", "erro!", JOptionPane.ERROR_MESSAGE);
		getTfVisualizarConta().dispose();

	}

	public void setExecutaVisualizarConta(Action executaVisualizarConta) {
		this.executaVisualizarConta = executaVisualizarConta;
	}

	public Action getExecutaVisualizarConta() {
		return executaVisualizarConta;
	}

	/*
	public void setlNumAp(JLabel lNumAp) {
		this.lNumAp = lNumAp;
	}

	public JLabel getlNumAp() {
		return lNumAp;
	}

	public void settNumAp(JTextField tNumAp) {
		this.tNumAp = tNumAp;
	}

	public JTextField gettNumAp() {
		return tNumAp;
	}

	public void setbFecha(JButton bFecha) {
		this.bFecha = bFecha;
	}

	public JButton getbFecha() {
		return bFecha;
	}

	public void setbProcura(JButton bProcura) {
		this.bProcura = bProcura;
	}

	public JButton getbProcura() {
		return bProcura;
	}
	*/

	public void setTfVisualizarConta(JFrame tfVisualizarConta) {
		this.tfVisualizarConta = tfVisualizarConta;
	}

	public JFrame getTfVisualizarConta() {
		return tfVisualizarConta;
	}

}
